package com.njchy.statistics.util;


import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartFile;
import java.awt.*;
import java.io.File;
import java.io.IOException;

/**
 * 文件上传的工具类
 */
@Slf4j
@Data
@Configuration
public class FileUploadUtil {

    @Value("${upload.upload-url}")
    private String fileUploadUrl;

    @Value("${upload.upload-path-file}")
    private String fileUploadPath;

    @Value("${upload.upload-path-address}")
    private String fileUploadPathAddress;


    /**
     * 服务器使用地址
     * * nginx服务转发：
     * * # 设置上传超时和缓冲区
     * * location /java/images/ {
     * *  root /java/;             # 设置映射的根目录为 /pipe_h5/
     * *  autoindex on;               # 启用目录浏览功能
     * *  autoindex_exact_size off;   # 可选，禁用文件大小的精确显示（显示更简单的大小）
     * *  autoindex_localtime on;     # 可选，启用本地时间显示
     * *   try_files $uri $uri/ =404;  # 确保文件或目录存在
     * *     }
     * *     proxy_read_timeout 600s;  # 设置读取响应的超时时间
     * *     proxy_send_timeout 600s;  # 设置发送请求的超时时间
     * *     client_max_body_size 100M;  # 设置最大上传文件大小
     *
     * @param file
     * @return
     */
    public String fileUploadProd(MultipartFile file) {
        try {
            // 获取当前的工作目录(本地使用)
            String uploadDirProd = fileUploadPathAddress + fileUploadPath;
            // 判断是否存在文件夹
            File dir = new File(uploadDirProd);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            String fileName = file.getOriginalFilename();
            File dest = new File(dir.getAbsolutePath() + File.separator + fileName);
            // 将上传的地址转变为服务器可读地址
            file.transferTo(dest);
            // 返回文件路径（拼接文件地址返回）
            String urlResp = fileUploadUrl + fileUploadPath + fileName;
            log.info("urlResp:{}", urlResp);
            return urlResp;
        } catch (IOException e) {
            e.printStackTrace();
            log.info("文件上传失败！:{}", e.getMessage());
        }
        return null;
    }

}
